<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
        浏览器事件循环（轮询）机制
          1. 概念：异步代码执行机制
          2. 流程：
            js主线程会依次执行所有代码，遇到同步代码依次执行，遇到异步代码会交给相应管理模块（分线程）去处理：
              比如遇到定时器，会交给定时器管理模块管理，它会计时，到点时会自动将回调函数添加到回调队列中（宏任务队列）
              比如遇到DOM事件，会交给DOM管理模块管理，它会绑定事件，当触发事件时会自动将回调函数添加到回调队列中（宏任务队列）
              比如遇到ajax请求，会交给ajax管理模块管理，它会发送请求，等响应回来时会自动将回调函数添加到回调队列中（宏任务队列）
            js主线程并不会等，会依次执行后面的代码，直到所有代码执行完毕，js主线程就会开启事件轮询
            js主线程会遍历回调队列中回调函数，依次取出，同步执行
              回调队列分为两种队列：宏任务队列和微任务队列
              宏任务队列：定时器回调函数、ajax回调函数、DOM事件回调函数
              微任务队列：Promise.then/catch/finally、mutationObserver（nextTick方法的原理）
            优先执行微任务队列中的回调函数，直到全部执行完毕，
            在执行宏任务队列中第一个回调函数，执行完又会执行，微任务队列中的回调函数，直到全部执行完毕，
            在执行下一个宏任务队列中回调函数，执行完又会执行，微任务队列中的回调函数，直到全部执行完毕，以此类推
    */
    </script>
  </body>
</html>
